home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Special 24 / AMIGAplus Sonderheft 24 (2000)(Falke)(DE)[!].iso / PublicDomain / Anwendungen / MT-RechnungIII / Rexx / FWAngebot2.outrexx < prev    next >
Text File  |  1998-11-26  |  11KB  |  503 lines

  1. /*
  2. ** Druck-, Vorschau, Sichern des Angebots mit Hilfe von FinalWriter
  3. ** $VER: FWAngebot2.outrexx V1.00 (27.11.98)
  4. */
  5.  
  6. PARSE ARG ARexxPort;
  7.  
  8. ADDRESS VALUE ARexxPort;
  9. OPTIONS RESULTS;
  10.  
  11. FWVorlage    = "FWDokumente/Angebot2.fw";
  12. FWDokument    = "t:Angebot2.fw";
  13. FWPort        = "FINALW."
  14.  
  15. LF                = '0a'x;                            /* Zeilenvorschub                */
  16.  
  17. Gefunden = 0;
  18. DO i = 1 TO 20 WHILE(Gefunden = 0)
  19.     IF show(ports, (FWPort || i)) THEN
  20.         DO;
  21.             Gefunden = 1;
  22.             FWPort     = FWPort || i;
  23.         END;
  24. END;
  25.  
  26. IF Gefunden = 0 THEN
  27.     DO;
  28.         ES_TITLE                = "Warnung";
  29.         ES_TEXTFORMAT        = "FinalWriter ist nicht aktiv, bitte starten sie dieses" || LF || "und versuchen Sie es erneut";
  30.         ES_GADGETFORMAT    = "Abbrechen";
  31.         EASY_REQUEST;
  32.         EXIT;
  33.     END;
  34.  
  35. /* Original FW-Dokument nach t: kopieren, um ein versehentliches überschreiben */
  36. /* dieser Vorlage zu verhindern */
  37. GET_REXXPATH;
  38. FWVorlage        = MTR_RESULT || FWVorlage;
  39. ADDRESS COMMAND "copy" FWVorlage FWDokument;
  40.  
  41. /* Oberfläche sperren */
  42. LOCKGUI;
  43.  
  44. /* Art ermitteln: 0 = Drucken, 1 = Vorschau, 2 = Speichern */
  45. PRINTSTATE;
  46. Druckart = MTR_RESULT;
  47.  
  48. Ende_Kennzeichen = 'N';
  49.  
  50. /* Suchen der zu druckenden Daten */
  51. GET_PREFS;
  52. PRINTFIND;
  53.  
  54. DO WHILE( MTR_RESULT > 0 & Ende_Kennzeichen = 'N');
  55.     ADDRESS VALUE FWPort;
  56.     SCREENTOFRONT;
  57.  
  58.     CALL DatenAufbereiten;
  59.     SELECT;
  60.         WHEN Druckart = 0 THEN    /* Drucken    */
  61.             DO;
  62.                 ADDRESS VALUE FWPort;
  63.                 PRINT;
  64.                 ADDRESS VALUE ARexxPort;
  65.                 MTSCREENTOFRONT;
  66.             END;
  67.         WHEN Druckart = 1 THEN    /* Vorschau    */
  68.             ADDRESS VALUE ARexxPort;
  69.         WHEN Druckart = 2 THEN    /* Sichern    */
  70.             DO;
  71.                 ADDRESS VALUE FWPort;
  72.                 SAVEAS;
  73.                 ADDRESS VALUE ARexxPort;
  74.                 MTSCREENTOFRONT;
  75.             END;
  76.         OTHERWISE
  77.             DO;
  78.                 ES_TITLE                = "Warnung";
  79.                 ES_TEXTFORMAT        = "Druckart wird nicht unterstützt!";
  80.                 ES_GADGETFORMAT    = "Ok";
  81.                 EASY_REQUEST;
  82.                 Ende_Kennzeichen    = 'J';
  83.             END;
  84.     END;
  85.  
  86.     PRINTFIND;
  87. END;
  88.  
  89. /* WordWorth-Datei aus t: wieder entfernen */
  90. ADDRESS COMMAND "delete" FWDokument;
  91.  
  92. /* Oberfläche wieder entsperren */
  93. ADDRESS VALUE ARexxPort;
  94. FREEGUI;
  95.  
  96. EXIT;
  97.  
  98. DatenAufbereiten:
  99.  
  100.     ADDRESS VALUE ARexxPort;
  101.  
  102.     IF PREFS.NUMBER_DIGITS > 0 THEN
  103.         DO;
  104.             ZW_Rechnung = RIGHT( (Copies("0",PREFS.NUMBER_DIGITS) || MTR_RESULT), PREFS.NUMBER_DIGITS );
  105.             ZW_Kunde = RIGHT( (Copies("0",PREFS.NUMBER_DIGITS) || OB.INVOICEE_NUMBER), PREFS.NUMBER_DIGITS );
  106.         END;
  107.     ELSE
  108.         DO;
  109.             ZW_Rechnung = MTR_RESULT;
  110.             ZW_Kunde = OB.INVOICEE_NUMBER;
  111.         END;
  112.     IF PREFS.CLIENT_CODE = 1 THEN
  113.         ZW_Kunde    = OB.INVOICEE.CUSTOMER.CLIENT_CODE;
  114.  
  115.     FORMAT_DATE_LONG date(s);
  116.     PRINTDATE = MTR_RESULT;
  117.  
  118.     FORMAT_DATE_LONG OB.DATE_TENDER;
  119.     IF MTR_RESULT = "" THEN
  120.         TENDER_DATE_LONG = " ";
  121.     ELSE
  122.         TENDER_DATE_LONG = MTR_RESULT;
  123.  
  124.     w = OB.CURRENCY_USED;
  125.     IF w < 2 THEN
  126.         FORMAT_MONEY1 OB.TOTAL_M_ALL_CH.w;
  127.     ELSE
  128.         FORMAT_MONEY2 OB.TOTAL_M_ALL_CH.w;
  129.     ZW_Betrag    = MTR_RESULT;
  130.  
  131.     IF w < 2 THEN
  132.         FORMAT_MONEY1 OB.DISPATCH_COSTS.w;
  133.     ELSE
  134.         FORMAT_MONEY2 OB.DISPATCH_COSTS.w;
  135.     ZW_Versand    = MTR_RESULT;
  136.  
  137.     FORMAT_NUMBER OB.DISCOUNT_PERCENT PREFS.FRAC_DIGITS_PERCENT;
  138.     DISP    = MTR_RESULT;
  139.  
  140.     IF w < 2 THEN
  141.         FORMAT_MONEY1 OB.DISCOUNT.w;
  142.     ELSE
  143.         FORMAT_MONEY2 OB.DISCOUNT.w;
  144.     DIS    = MTR_RESULT;
  145.  
  146.     IF w < 2 THEN
  147.         FORMAT_MONEY1 OB.TOTAL_M_ALL_CH.0;
  148.     ELSE
  149.         FORMAT_MONEY2 OB.TOTAL_M_ALL_CH.2;
  150.     SUM_NET        = MTR_RESULT;
  151.  
  152.     IF w < 2 THEN
  153.         FORMAT_MONEY1 OB.TOTAL_M_ALL_CH.1;
  154.     ELSE
  155.         FORMAT_MONEY2 OB.TOTAL_M_ALL_CH.3;
  156.     SUM_GROSS    = MTR_RESULT;
  157.  
  158.  
  159.     ADDRESS VALUE FWPort;
  160.     CLEARDOC;
  161.     OPEN FWDokument;
  162.  
  163.     DruckString    = OB.OFFICE.ADDRESS.ADDRESS.2 || LF;
  164.     i = INDEX( DruckString, LF);
  165.     IF i > 0 THEN
  166.         DO;
  167.             DruckTeil    = LEFT( DruckString, (i - 1) );
  168.             DruckString = SUBSTR(DruckString, (i + 1) );
  169.             i = INDEX( DruckString, LF);
  170.         END;
  171.     ELSE
  172.         DruckTeil    = DruckString;
  173.     FIND "<OFFICE.ADDRESS.2>";
  174.     FINDNEXT;
  175.     STATUS LinePos;
  176.     PARSE VAR RESULT BegLine BegPosition EndLine EndPosition;
  177.     TYPE DruckTeil;
  178.     FIND "<PRINTDATE>"
  179.     TYPE PRINTDATE;
  180.  
  181.     DO WHILE( i > 0 );
  182.         DruckTeil    = LEFT( DruckString, (i - 1) );
  183.         DruckString = SUBSTR(DruckString, (i + 1) );
  184.         BegLine        = BegLine + 1;
  185.         MoveToLine BegLine 0;
  186.         TYPE DruckTeil;
  187.         i = INDEX( DruckString, LF);
  188.     END;
  189.  
  190.     FIND "<OFFICE.ADDRESS.ADDRESS.0>";
  191.     TYPE OB.OFFICE.ADDRESS.ADDRESS.0;
  192.  
  193.     FIND "<CUSTOMER.ADDRESS.ADDRESS.2>";
  194.  
  195.     IF OB.INVOICEE_NUMBER = 0 THEN
  196.         TYPE "Barverkauf";
  197.     ELSE
  198.         DO;
  199.             STATUS LinePos;
  200.             PARSE VAR RESULT BegLine BegPosition EndLine EndPosition;
  201.             DruckString    = OB.INVOICEE.CUSTOMER.ADDRESS.ADDRESS.2 || LF;
  202.             i = INDEX( DruckString, LF);
  203.             IF i > 0 THEN
  204.                 DO;
  205.                     DruckTeil    = LEFT( DruckString, (i - 1) );
  206.                     DruckString = SUBSTR(DruckString, (i + 1) );
  207.                     i = INDEX( DruckString, LF);
  208.                 END;
  209.             ELSE
  210.                 DruckTeil    = DruckString;
  211.             TYPE DruckTeil;
  212.             DO WHILE( i > 0 );
  213.                 DruckTeil    = LEFT( DruckString, (i - 1) );
  214.                 DruckString = SUBSTR(DruckString, (i + 1) );
  215.                 BegLine        = BegLine + 1;
  216.                 MoveToLine BegLine 0;
  217.                 TYPE DruckTeil;
  218.                 i = INDEX( DruckString, LF);
  219.             END;
  220.         END;
  221.  
  222.  
  223.     FIND "<OB.INVOICEE_NUMBER>";
  224.     TYPE ZW_Kunde;
  225.  
  226.     FIND "<OB.NUMBER>";
  227.     TYPE ZW_Rechnung;
  228.  
  229.     FIND "<OB.DATE_TENDER>";
  230.     TYPE TENDER_DATE_LONG;
  231.  
  232.     FIND "<OB.EMPLOYEE.SUR_PRENAME>";
  233.     TYPE (OB.EMPLOYEE.ADDRESS.PRENAME OB.EMPLOYEE.ADDRESS.SURNAME);
  234.  
  235.     FIND "<ARTICLE>";
  236.     STATUS LinePos;
  237.     PARSE VAR RESULT BegLine BegPosition EndLine EndPosition;
  238.     BACKSPACE;
  239.  
  240.     DO i = 1 to OB.COUNT_ARTICLE;
  241.  
  242.         ADDRESS VALUE ARexxPort;
  243.  
  244.         ZW_ArtikelNr    = OB.i.POS_ARTICLE_NUMBER_FORMATED;
  245.  
  246.         FORMAT_NUMBER (OB.i.POS_QUANTITY / OB.i.POS_PRICE_UNIT) PREFS.FRAC_DIGITS;
  247.         ZW_Anzahl        = MTR_RESULT;
  248.  
  249.         NAME_OF_QUANTITY_UNIT OB.i.ARTICLE.QUANTITY_UNIT;
  250.         ZW_Einheit        = MTR_RESULT;
  251.  
  252.         j = OB.i.POS_VALUE;
  253.         FORMAT_NUMBER OB.VALUE_PERCENT.j PREFS.FRAC_DIGITS_PERCENT;
  254.         ZW_MWSt            = MTR_RESULT;
  255.  
  256.         ZW_Bezeichnung = OB.i.ARTICLE.DESCRIPTION;
  257.  
  258.         IF w < 2 THEN
  259.             FORMAT_MONEY1 OB.i.POS_SINGLE_PRICE.w;
  260.         ELSE
  261.             FORMAT_MONEY2 OB.i.POS_SINGLE_PRICE.w;
  262.         ZW_EinzelPreis    = MTR_RESULT;
  263.         
  264.         ADDRESS VALUE FWPort;
  265.  
  266.         TYPE ZW_ArtikelNr || "    " || ZW_Anzahl || "    " || ZW_Bezeichnung || "    " || ZW_Einheit || "    " || ZW_MWSt || "    " || ZW_EinzelPreis;
  267.  
  268.         IF OB.i.ARTICLE.ADDITIONAL_TEXT > "" THEN
  269.             DO;
  270.                 DruckString    = OB.i.ARTICLE.ADDITIONAL_TEXT || LF;
  271.                 i2 = INDEX( DruckString, LF);
  272.                 DO WHILE( i2 > 0 );
  273.                     DruckTeil    = LEFT( DruckString, (i2 - 1) );
  274.                     DruckString = SUBSTR(DruckString, (i2 + 1) );
  275.                     BegLine        = BegLine + 1;
  276.                     MoveToLine BegLine 0;
  277.                     TYPE "        " || DruckTeil || "            ";
  278.                     i2 = INDEX( DruckString, LF);
  279.                 END;
  280.             END;
  281.  
  282.         IF OB.i.POS_REMARK > "" THEN
  283.             DO;
  284.                 DruckString    = OB.i.POS_REMARK || LF;
  285.                 i2 = INDEX( DruckString, LF);
  286.                 DO WHILE( i2 > 0 );
  287.                     DruckTeil    = LEFT( DruckString, (i2 - 1) );
  288.                     DruckString = SUBSTR(DruckString, (i2 + 1) );
  289.                     BegLine        = BegLine + 1;
  290.                     MoveToLine BegLine 0;
  291.                     TYPE "        " || DruckTeil || "            ";
  292.                     i2 = INDEX( DruckString, LF);
  293.                 END;
  294.             END;
  295.  
  296.         DO i2 = 0 TO 2;
  297.             IF OB.i.POS_ADD_RED_USED.i2 > 0 THEN
  298.                 DO;
  299.                     ADDRESS VALUE ARexxPort;
  300.  
  301.                     j2 = OB.i.POS_ADD_RED_USED.i2 - 1;
  302.                     IF OB.i.POS_ADD_RED_TYPE.i2 = 0 | OB.i.POS_ADD_RED_TYPE.i2 = 5 THEN
  303.                         DO;
  304.                             FORMAT_NUMBER OB.i.POS_ADD_RED_VALUE.i2.w PREFS.FRAC_DIGITS_PERCENT;
  305.                         END;
  306.                     ELSE
  307.                         DO;
  308.                             IF w < 2 THEN
  309.                                 FORMAT_MONEY1 OB.i.POS_ADD_RED_VALUE.i2.w;
  310.                             ELSE
  311.                                 FORMAT_MONEY2 OB.i.POS_ADD_RED_VALUE.i2.w;
  312.                         END;
  313.                     ZW_EinzelZuAb    = RIGHT(MTR_RESULT, 15);
  314.  
  315.                     IF w < 2 THEN
  316.                         FORMAT_MONEY1 OB.i.POS_ADD_RED_VALUE_POS.i2.w;
  317.                     ELSE
  318.                         FORMAT_MONEY2 OB.i.POS_ADD_RED_VALUE_POS.i2.w;
  319.                     ZW_PosZuAb        = RIGHT(MTR_RESULT, 15);
  320.  
  321.                     ADDRESS VALUE FWPort;
  322.                     BegLine        = BegLine + 1;
  323.                     MoveToLine BegLine 0;
  324.                     TYPE "        " || PREFS.ADD_RED_TEXT.j2 || "        " || ZW_EinzelZuAb || "    " || ZW_PosZuAb;
  325.                 END;
  326.         END;
  327.  
  328.         ADDRESS VALUE ARexxPort;
  329.  
  330.         IF w < 2 THEN
  331.             FORMAT_MONEY1 OB.i.POS_SUM_M_ALL.w;
  332.         ELSE
  333.             FORMAT_MONEY2 OB.i.POS_SUM_M_ALL.w;
  334.         ZW_PosPreis        = MTR_RESULT;
  335.  
  336.         ADDRESS VALUE FWPort;
  337.         TYPE "    " || ZW_PosPreis;
  338.         BegLine        = BegLine + 1;
  339.         MoveToLine BegLine 0;
  340.  
  341.     END;
  342.  
  343.     FIND "<DESCRIPTION>";
  344.     j2 = 0;
  345.     IF OB.REMARK > "" THEN
  346.         DO;
  347.             DruckString    = OB.REMARK || LF;
  348.             i2 = INDEX( DruckString, LF);
  349.             DO WHILE( i2 > 0 );
  350.                 DruckTeil    = LEFT( DruckString, (i2 - 1) );
  351.                 DruckString = SUBSTR(DruckString, (i2 + 1) );
  352.                 IF j2 > 0 THEN
  353.                     NEWPARAGRAPH;
  354.                 TYPE DruckTeil;
  355.                 i2 = INDEX( Dru